/**
 * 数据劫持
 * 对待一个对象 取值或赋值的时候可以配置劫持的方法，数据属性的劫持
 * 阻拦正常的输出和输入，按照get和set里的机制，进行数据的操作的逻辑
 * 把一个对象里的属性，进行 可写、可枚举、可配置的操作，通过get()set()对存取值进行逻辑上的扩展
 */

function defineProperty() {
    var _obj = {};

    var a = 1;

    // 每个属性定义的时候都会产生 getter setter 机制
    // 用来对属性进行各种操作时的反应
    // 对获取属性的时候，对属性进行重新赋值的时候，应当进行怎样的程序逻辑

    Object.defineProperties(_obj, {
        a: {
            get() {
                return '"a"\'s value is ' + a + ',';
            },
            set(newValue) {
                console.log('The value "a" has been designed a new value"' + newValue + '".');
            }
        },
        b: {},
    });

    return _obj;
}

var obj = defineProperty();
console.log(obj.a)
obj.a = 2;
